#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/wait.h>

#include <unistd.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    // 获取IPC键值
    key_t k1 = ftok("/home/disen/syscode", 2);
    if(k1==-1){
        perror("ftok");
        return -1;
    }

    // IPC_CREAT 表示如果k1对应的消息队列不存在，则创建，创建的权限为0644
    int msgid = msgget(k1, IPC_CREAT|0644); // 获取或创建消息队列
    if(msgid == -1){
        perror("msgget");
        return -1;
    }
    // 系统的第一个消息队列的ID是0
    printf("msg id is %d\n", msgid);

    // 获取消息队列的信息
    struct msqid_ds msq_info;
    if(msgctl(msgid, IPC_STAT, &msq_info) == 0){
        printf("当前消息队列的个数： %lu\n", msq_info.msg_qnum);
        printf("最后发送消息的PID： %d\n", msq_info.msg_lspid);
        printf("最后接收消息的PID： %d\n", msq_info.msg_lrpid);
    } 

    // 删除消息队列
    if(msgctl(msgid, IPC_RMID, NULL) == 0){
        printf("%d 消息队列删除成功!\n", msgid);
    }

    system("ipcs -q");
    
    return 0;
}
